﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Migrador;
using System.IO;
using System.Collections.Generic;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    //protected string valid(OleDbDataReader myreader, int stval)//if any columns are found null then they are replaced by zero
    //{
    //    object val = myreader[stval];
    //    if (val != DBNull.Value)
    //        return val.ToString();
    //    else
    //        return string.Empty;
    //}


    protected void borrarTodo_Click(object sender, EventArgs e)
    {
        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {
            contexto.BorrarMigracion();
        }


    }

    protected void insertdata_Click(object sender, EventArgs e)
    {

        string pathFile = @"C:\EpSchool\Codigo\Documentos\InsumosBoletines\ricaurte_datos\estudiantes.csv";
        if (!System.IO.File.Exists(pathFile)) return;
        TextReader tr = new StreamReader(pathFile);

        try
        {
            TextReader textReader = new StreamReader(pathFile);
            string cod = "";
            string a1 = "";
            string a2 = "";
            string n1 = "";
            string n2 = "";
            string titulo = "";
            string ndc1 = "";
            string ndc2 = "";
            string adc1 = "";
            string adc2 = "";
            string grado = "";
            string salon = "";

            bool continuar = true;
            string lineaCols = string.Empty;
            textReader.ReadLine(); // primera linea de cabeceras no se usa
            textReader.ReadLine(); // primera linea de cabeceras no se usa
            while ((lineaCols = textReader.ReadLine()) != null && continuar)
            {
                string[] cols = lineaCols.Split(';');


                cod = valid(cols, 1);
                a1 = valid(cols, 2);
                a2 = valid(cols, 3);
                n1 = valid(cols, 4);
                n2 = valid(cols, 5);
                titulo = valid(cols, 6);
                ndc1 = valid(cols, 7);
                ndc2 = valid(cols, 8);
                adc1 = valid(cols, 9);
                adc2 = valid(cols, 10);
                grado = valid(cols, 11);
                salon = valid(cols, 12);
                continuar = insertdataintosql(cod, a1, a2, n1, n2, titulo, ndc1, ndc2, adc1, adc2, grado, salon);
            }
            //oconn.Close();
        }
        catch (DataException ee)
        {
            lblmsg.Text = ee.Message;
            lblmsg.ForeColor = System.Drawing.Color.Red;
        }
        finally
        {
            lblmsg.Text = "Datos insertados exitosamente";
            lblmsg.ForeColor = System.Drawing.Color.Green;
        }
    }

    protected void viewdata_Click(object sender, EventArgs e)
    {
        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {

            try
            {


                GridView1.DataSource = contexto.MigracionCursos.ToList();
                GridView1.DataBind();
            }
            catch (DataException de)
            {
                lblmsg.Text = de.Message;
                lblmsg.ForeColor = System.Drawing.Color.Red;
            }
            finally
            {
                lblmsg.Text = "Consulta datos exitosa";
                lblmsg.ForeColor = System.Drawing.Color.Green;
            }
        }
    }

    public bool insertUserEvalintoSql(int id, int idTipo, string login, string nombre, string password)
    {

        using (DataClassesEvaluacionDataContext contexto = new DataClassesEvaluacionDataContext())
        {
            Usuario usuario = new Usuario();
            usuario.Id = id;
            usuario.IdTipoUsuario = idTipo;
            usuario.Login = login;
            usuario.Nombre = nombre;
            usuario.Password = password;
            contexto.Usuarios.InsertOnSubmit(usuario);
            contexto.SubmitChanges();
        }
        return true;
            
    }



    public bool insertdataintosql(string cod, string a1, string a2, string n1, string n2, string titulo,
        string ndc1, string ndc2, string adc1, string adc2, string grado, string salon)
    {
        if (cod == null || cod.Length == 0) return false;


        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {
            MigracionCurso migracionReg = new MigracionCurso();
            migracionReg.A1 = a1;
            migracionReg.A2 = a2;
            migracionReg.ADC1 = adc1;
            migracionReg.ADC2 = adc2;
            migracionReg.COD = int.Parse(cod);
            migracionReg.GRADO = int.Parse(grado.ToString());
            migracionReg.N1 = n1;
            migracionReg.N2 = n2;
            migracionReg.NDC1 = ndc1;
            migracionReg.NDC2 = ndc2;
            migracionReg.SALON = int.Parse(salon);
            migracionReg.TITULO = titulo;
            contexto.MigracionCursos.InsertOnSubmit(migracionReg);
            contexto.SubmitChanges();

        }

        return true;



    }
    protected void deletedata_Click(object sender, EventArgs e)
    {

        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {
            //SqlConnection conn = new SqlConnection("Data Source=.\\sqlexpress;AttachDbFileName=|DataDirectory|exceltosql.mdf;Trusted_Connection=yes");
            try
            {
                contexto.MigracionCursos.DeleteAllOnSubmit(contexto.MigracionCursos.ToList());
                contexto.SubmitChanges();
            }
            catch (DataException de1)
            {
                lblmsg.Text = de1.Message;
                lblmsg.ForeColor = System.Drawing.Color.Red;
            }
            finally
            {
                lblmsg.Text = "Datos eliminados exitoso";
                lblmsg.ForeColor = System.Drawing.Color.Red;
            }
        }
    }



    protected void asociarSedesJornada_Click(object sender, EventArgs e)
    {
        // Trae las migraciones carga y por cada una de ellas, busca los cursos a partir de los docentes.
        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {
            List<MigracionCarga> datos = contexto.MigracionCargas.ToList();

            foreach (var a in datos)
            {
                if (a.SEDE == null || a.SEDE.Length == 0) continue;
                if (a.CURSOS == null || a.CURSOS.Length == 0) continue;
                // parte el string 
                string[] items = a.SEDE.Split('.');
                if (items.Count() != 3) continue;


                string strSede = items.First();
                string strJornada = items.Last();


                int? idSede = contexto.GetSedeByNombre(strSede);
                if (!idSede.HasValue) throw new ArgumentException();
                int? idJornada = contexto.GetJornadaByAlias(strJornada);
                if (!idJornada.HasValue) throw new ArgumentException();




                List<string> cursosDoc = a.CURSOS.Split(',').ToList();

                List<GradosSede> gradosSedes = new List<GradosSede>();
                foreach (var curso in cursosDoc)
                {
                    if (curso.Length == 0) continue;
                    int? idGrado = contexto.GetGradoByNumero(int.Parse(curso));
                    if (!idGrado.HasValue) throw new ArgumentException();

                    GradosSede gradoSede = new GradosSede();
                    gradoSede.IdGrado = idGrado.Value;
                    gradoSede.IdSede = idSede.Value;
                    gradoSede.IdTipoJornada = idJornada.Value;

                    // Si no existe la crea (solo una vez)
                    IEnumerable<GradosSede> encontrados =
                        contexto.GradosSedes.Where(x => x.IdGrado == gradoSede.IdGrado
                        && x.IdSede == gradoSede.IdSede && x.IdTipoJornada == gradoSede.IdTipoJornada);

                    if (encontrados.Count() > 0)
                        continue;

                    contexto.GradosSedes.InsertOnSubmit(gradoSede);
                    contexto.SubmitChanges();

                }
            }
        }



    }

    protected void insertUserEvaluacion_Click(object sender, EventArgs e)
    {

        string pathFile = @"C:\EpSchool\Codigo\Documentos\InsumosBoletines\ricaurte_datos\loginsEval.csv";
        if (!System.IO.File.Exists(pathFile)) return;
        TextReader tr = new StreamReader(pathFile);

        try
        {
            TextReader textReader = new StreamReader(pathFile);
            int id = 0;
            int idTipoUsuario = 1;
            string login = "";
            string nombre = "Anonimo";
            string password = "";

            bool continuar = true;
            string lineaCols = string.Empty;
            textReader.ReadLine(); // primera linea de cabeceras no se usa
            textReader.ReadLine(); // primera linea de cabeceras no se usa
            while ((lineaCols = textReader.ReadLine()) != null && continuar)
            {
                string[] cols = lineaCols.Split(';');
                id++;
                login = cols[0];
                password  = cols[1];

                continuar = insertUserEvalintoSql(id, idTipoUsuario, login, nombre, password);
                
            }
            //oconn.Close();
        }
        catch (DataException ee)
        {
            lblmsg.Text = ee.Message;
            lblmsg.ForeColor = System.Drawing.Color.Red;
        }
        finally
        {
            lblmsg.Text = "Datos insertados exitosamente";
            lblmsg.ForeColor = System.Drawing.Color.Green;
        }
    }



    protected void asociarCursosDocente_Click(object sender, EventArgs e)
    {
        // Trae las migraciones carga y por cada una de ellas, busca los cursos a partir de los docentes.
        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {
            List<MigracionCarga> datos = contexto.MigracionCargas.ToList();

            foreach (var a in datos)
            {
                if (a.ASIGNATURA == null || a.ASIGNATURA.Length == 0) continue;

                // TRAE el id del docente
                int? idPersona = contexto.GetPersonaByNombres(a.N1, a.N2, a.A1, a.A2);
                if (!idPersona.HasValue) throw new ArgumentException();


                int? idAsignatura = contexto.GetAsignaturaByNombre(a.ASIGNATURA);
                if (!idAsignatura.HasValue) throw new ArgumentException();


                List<string> cursosDoc = a.CURSOS.Split(',').ToList();

                List<AsignaturasDocente> asignaturasDocentes = new List<AsignaturasDocente>();
                foreach (var curso in cursosDoc)
                {
                    if (curso.Length == 0) continue;
                    int? idGrado = contexto.GetGradoByNumero(int.Parse(curso));
                    if (!idGrado.HasValue) throw new ArgumentException();


                    AsignaturasDocente asignatu = new AsignaturasDocente();
                    asignatu.IdAsignatura = idAsignatura.Value;
                    asignatu.IdDocente = idPersona.Value;
                    asignatu.IdGrado = idGrado.Value;


                    asignaturasDocentes.Add(asignatu);

                }

                // los agrega 

                contexto.AsignaturasDocentes.InsertAllOnSubmit(asignaturasDocentes);
                contexto.SubmitChanges();



            }
        }
    }


    protected void insertdatacarga_Click(object sender, EventArgs e)
    {
        string pathFile = @"C:\EpSchool\Codigo\Documentos\InsumosBoletines\ricaurte_datos\carga.csv";
        if (!System.IO.File.Exists(pathFile)) return;
        TextReader tr = new StreamReader(pathFile);

        try
        {
            TextReader textReader = new StreamReader(pathFile);
            string cc = "";
            string n1 = "";
            string n2 = "";
            string a1 = "";
            string a2 = "";
            string cargo = "";
            string escalafon = "";
            string titulo = "";
            string posgrado = "";
            string dirCurso = "";
            string asignatura = "";
            string cursos = "";
            string sede = "";
            string efqm = "";


            bool continuar = true;
            string lineaCols = string.Empty;
            textReader.ReadLine(); // primera linea de cabeceras no se usa
            while ((lineaCols = textReader.ReadLine()) != null && continuar)
            {
                string[] cols = lineaCols.Split(';');

                {
                    cc = valid(cols, 1);
                    n1 = valid(cols, 2);
                    n2 = valid(cols, 3);
                    a1 = valid(cols, 4);
                    a2 = valid(cols, 5);
                    cargo = valid(cols, 6);
                    escalafon = valid(cols, 7);
                    titulo = valid(cols, 8);
                    posgrado = valid(cols, 9);
                    dirCurso = valid(cols, 10);
                    asignatura = valid(cols, 11);
                    cursos = valid(cols, 12);
                    sede = valid(cols, 13);
                    efqm = valid(cols, 14);
                }


                continuar = insertdataintosqlcarga(cc, n1, n2, a1, a2, cargo, escalafon, titulo, posgrado, dirCurso,
                    asignatura, cursos, sede, efqm);
            }
        }
        catch (DataException ee)
        {
            lblmsg.Text = ee.Message;
            lblmsg.ForeColor = System.Drawing.Color.Red;
        }
        finally
        {
            lblmsg.Text = "Datos insertados exitosamente";
            lblmsg.ForeColor = System.Drawing.Color.Green;
        }
    }

    private string valid(string[] cols, int stval)
    {
        object val = cols[stval];
        if (val != DBNull.Value)
            return val.ToString();
        else
            return string.Empty;
    }


    protected void viewdatacarga_Click(object sender, EventArgs e)
    {
        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {

            try
            {
                GridView1.DataSource = contexto.MigracionCargas.ToList();
                GridView1.DataBind();
            }
            catch (DataException de)
            {
                lblmsg.Text = de.Message;
                lblmsg.ForeColor = System.Drawing.Color.Red;
            }
            finally
            {
                lblmsg.Text = "Consulta datos exitosa";
                lblmsg.ForeColor = System.Drawing.Color.Green;
            }
        }
    }
    public bool insertdataintosqlcarga(string cc, string n1, string n2, string a1, string a2,
        string cargo, string escalafon, string titulo, string posgrado, string dirCurso, string asignatura, string cursos,
        string sede, string efqm)
    {
        if (cc == null || cc.Length == 0) return false;
        if (a1 == null || a1.Length == 0) return false;
        if (n1 == null || n1.Length == 0) return false;
        if (titulo == null || titulo.Length == 0) return false;


        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {
            MigracionCarga migracionCarga = new MigracionCarga();
            migracionCarga.A1 = a1;
            migracionCarga.A2 = a2;
            migracionCarga.ASIGNATURA = asignatura;
            migracionCarga.CARGO = cargo;
            migracionCarga.CC = cc;
            migracionCarga.CURSOS = cursos;
            if (dirCurso.Length > 0)
                migracionCarga.DIRECTORCURSO = int.Parse(dirCurso);
            migracionCarga.EFQM = efqm;
            migracionCarga.ESCALAFON = escalafon;
            migracionCarga.N1 = n1;
            migracionCarga.N2 = n2;
            migracionCarga.POSGRADO = posgrado;
            migracionCarga.SEDE = sede;
            migracionCarga.TITULO = titulo;



            contexto.MigracionCargas.InsertOnSubmit(migracionCarga);
            contexto.SubmitChanges();

        }

        return true;



    }
    protected void deletedatacarga_Click(object sender, EventArgs e)
    {

        using (DataClassesSchoolDataContext contexto = new DataClassesSchoolDataContext())
        {
            //SqlConnection conn = new SqlConnection("Data Source=.\\sqlexpress;AttachDbFileName=|DataDirectory|exceltosql.mdf;Trusted_Connection=yes");
            try
            {
                contexto.MigracionCargas.DeleteAllOnSubmit(contexto.MigracionCargas.ToList());
                contexto.SubmitChanges();
            }
            catch (DataException de1)
            {
                lblmsg.Text = de1.Message;
                lblmsg.ForeColor = System.Drawing.Color.Red;
            }
            finally
            {
                lblmsg.Text = "Datos eliminados exitoso";
                lblmsg.ForeColor = System.Drawing.Color.Red;
            }
        }
    }







}
